/**
 * 创建 500 × 500 单通道 uchar 图像，用 0 填充每一个像素
 * a. 创建一个 ASCII 数字输入器，使得可以输入数字到计算机中，并使数字显示在10*20的块中，当你输入的时候，数字将会从左到右显示在图片中，直到到达图片的结尾。
 * b. 允许回车和退格
 * c. 允许使用箭头来编辑每一个数字
 * d. 创建一个键使得能将原来的图片转为彩色图，每个数字被设置为不同的颜色
 * 
 * 找字模，获取键盘输入
 * left:81, right:83, top:82, bottom:84
 * enter:12, backspace:8
 */


#include <opencv2/opencv.hpp>
#include <vector>
#include <iostream>


void control(const std::vector<uchar> numbers, int &row, int &col, bool &color, int keyboard)
{
    switch (keyboard)
    {
        case 'c':
            color = true;
            break;
        case 'b':
            color = false;
            break;
        case 8:
            
            break;
        case 13:

            break;
        case 81:
            
            break;
        case 83:
        
            break;
        case 82:
        
            break;
        case 84:
        
            break;
        default:
            break;
    }
}

void printNumber(const cv::Mat_<uchar>* img, const cv::Mat_<cv::Vec3b>* c_img, const uchar number, const int row, const int col, const bool color){


}


int main(int argc, char** argv)
{
    cv::Mat img(500, 500, CV_8UC1, cv::Scalar(0));
    cv::Mat color_img(500, 500,  CV_8UC3, cv::Scalar(0));
    cv::namedWindow("Numberic Writer", cv::WINDOW_AUTOSIZE);

    // 记录数字
    std::vector<uchar> numbers;
    int row = 0, col = 0;
    bool isColor = false;

    std::cout << "Type 'q' exit app" << std::endl
        << "Type number will show number in the window" << std::endl
        << "Type 'c' show clorful image and type 'b' show black-white image." << std::endl;

    while(true){
        cv::imshow("Numberic Writer", img);
        int key = cv::waitKey(30);
        // exit
        if (key == 'q') break;
        

        control(numbers, row, col, isColor, key);
        // 仅在有数字更新的时候，修改Mat
        printNumber((cv::Mat_<uchar>*) &img, (cv::Mat_<cv::Vec3b>*) &color_img, key, row, col, isColor);
    }
    

    return 0;
}